This group contains some classes and macros that allow collecting instances of FUnknown or FObject in template containers. More...
![]() |
Data Structures | |
class | FSortablePtr< I > |
Extends IPtr to allow sorted containers. More... | |
class | FComparablePtr< I > |
Extends IPtr to allow comparison in containers. More... | |
Defines | |
#define | FOREACH_O(type, varName, cont) |
Iterates a IPtr container. | |
#define | FOREACH_O_REVERSE(type, varName, cont) |
Iterates a IPtr container reverse. | |
#define | FOREACH_CAST(baseType, type, varName, cont) |
Iterates a template container - used with a basic item type that can be converted to another type using Steinberg::FCast. | |
#define | FOREACH_CAST_REVERSE(baseType, type, varName, cont) |
Just like /ref FOREACH_CAST only in reverse order. | |
#define | ARRAY_FOR_EACH_CAST(type, obj, containter) |
Special array iteration macro - can be used instead of FOREACH_CAST. | |
#define | ARRAY_FOR_EACH_REVERSE_CAST(type, obj, containter) |
Special array iteration macro - can be used instead of FOREACH_CAST_REVERSE. | |
Typedefs | |
typedef TArray< IPtr< FUnknown > > | FArray |
Array holding FUnknown pointers. | |
typedef TLinkedList< IPtr < FUnknown > > | FLinkedList |
Linked List holding FUnknown pointers. | |
typedef TContainer< IPtr < FUnknown > > | FContainer |
Template container holding FUnknown pointers - can be used as function parameter. |
This group contains some classes and macros that allow collecting instances of FUnknown or FObject in template containers.
When instances of FUnknown or FObject should be stored in one of the template collection classes and reference counting is required, this can be handled using the smart pointer class IPtr like this:
TLinkedList <IPtr <StringObject> > stringList; StringObject* test = new StringObject ("test"); stringList.add (test); test->release (); String tmp; FOREACH_O (StringObject, str, stringList) tmp += str->text (); ENDFOR
#define FOREACH_O | ( | type, | |||
varName, | |||||
cont | ) |
{ \ Steinberg::TIterator<IPtr<type > >* iter = (cont).newIterator (); \ Steinberg::FDeleter <Steinberg::TIterator<IPtr<type > > > iterDeleter (iter);\ while (!iter->done ()) { \ type* varName = iter->next ();
Iterates a IPtr container.
This macro does not support casting.
#define FOREACH_O_REVERSE | ( | type, | |||
varName, | |||||
cont | ) |
{ \ Steinberg::TIterator<IPtr<type > >* iter = (cont).newIterator (); \ Steinberg::FDeleter <Steinberg::TIterator<IPtr<type > > > iterDeleter (iter);\ iter->last (); \ while (!iter->done ()) { \ type* varName = iter->previous ();
Iterates a IPtr container reverse.
This macro does not support casting.
#define FOREACH_CAST | ( | baseType, | |||
type, | |||||
varName, | |||||
cont | ) |
{ \ Steinberg::TIterator<baseType >* iter = (cont).newIterator (); \ Steinberg::FDeleter <Steinberg::TIterator<baseType > > iterDeleter (iter);\ while (!iter->done ()) { \ type* varName = Steinberg::FCast<type >(iter->next ()); \ if (varName == 0) continue;
Iterates a template container - used with a basic item type that can be converted to another type using Steinberg::FCast.
When the cast fails, the object is skipped. Example:
TLinkedList <IPtr <FUnknown> > stringList; StringObject* test = new StringObject ("test"); stringList.add (test->unknownCast ()); test->release (); String tmp; FOREACH_CAST (IPtr <FUnknown>, StringObject, str, stringList) tmp += str->text (); ENDFOR
#define FOREACH_CAST_REVERSE | ( | baseType, | |||
type, | |||||
varName, | |||||
cont | ) |
{ \ Steinberg::TIterator<baseType >* iter = (cont).newIterator (); \ Steinberg::FDeleter <Steinberg::TIterator<baseType > > iterDeleter (iter);\ iter->last (); \ while (!iter->done ()) { \ type* varName = Steinberg::FCast<type >(iter->previous ()); \ if (varName == 0) continue;
Just like /ref FOREACH_CAST only in reverse order.
#define ARRAY_FOR_EACH_CAST | ( | type, | |||
obj, | |||||
containter | ) |
{ for (int32 i = 0; i < containter.total (); i++) \ { type* obj = Steinberg::FCast<type > (containter.at (i)); \ if (!obj) continue;
Special array iteration macro - can be used instead of FOREACH_CAST.
#define ARRAY_FOR_EACH_REVERSE_CAST | ( | type, | |||
obj, | |||||
containter | ) |
{ for (int32 i = containter.total () - 1; i >= 0 ; i--) \ { type* obj = Steinberg::FCast<type > (containter.at (i)); \ if (!obj) continue;
Special array iteration macro - can be used instead of FOREACH_CAST_REVERSE.
typedef TArray<IPtr <FUnknown> > FArray |
Array holding FUnknown pointers.
typedef TLinkedList<IPtr <FUnknown> > FLinkedList |
Linked List holding FUnknown pointers.
typedef TContainer<IPtr <FUnknown> > FContainer |
Template container holding FUnknown pointers - can be used as function parameter.